Multicast এবং Broadcast হলো নেটওয়ার্কিং কৌশল, যা একাধিক ডিভাইসে একসাথে ডেটা পাঠাতে ব্যবহৃত হয়। নেটওয়ার্ক প্রোগ্রামিংয়ে, setsockopt()
এবং getsockopt()
ফাংশন ব্যবহার করে Multicast এবং Broadcast Options কনফিগার করে বিভিন্ন ডিভাইসে ডেটা ট্রান্সমিশন করা যায়। এগুলোর মাধ্যমে একাধিক সংযোগ দ্রুত এবং কার্যকরভাবে পরিচালনা করা যায়, বিশেষত যেখানে একাধিক ক্লায়েন্টকে একই ডেটা একসাথে পাঠাতে হয়।
Multicast হলো এমন একটি প্রক্রিয়া, যেখানে একটি ডেটা প্যাকেট একই সাথে একাধিক নির্দিষ্ট ডিভাইসে (Multicast Group) পাঠানো হয়। এটি সাধারণত UDP প্রোটোকল ব্যবহার করে এবং ডিভাইসগুলোতে একই ডেটা স্ট্রিম পৌঁছাতে সক্ষম। Multicast ব্যবহৃত হয় লাইভ ভিডিও স্ট্রিমিং, রিয়েল-টাইম ডেটা শেয়ারিং, এবং লাইভ গেমিংয়ের মতো অ্যাপ্লিকেশনগুলোর জন্য।
IP_MULTICAST_TTL
:
1
, যা একই নেটওয়ার্কে (local subnet) Multicast সীমাবদ্ধ রাখে। এটি বাড়িয়ে বিভিন্ন নেটওয়ার্কে বা ইন্টারনেটে Multicast করা যায়।IP_ADD_MEMBERSHIP
:
IP_DROP_MEMBERSHIP
:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/socket.h>
#define PORT 12345
#define GROUP "239.0.0.1" // Multicast Address
int main() {
int sockfd;
struct sockaddr_in multicast_addr;
char message[] = "Hello Multicast!";
int ttl = 5; // TTL মান সেট করা
// UDP Socket তৈরি করা
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// Multicast TTL সেট করা
if (setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)) < 0) {
perror("Setting TTL failed");
close(sockfd);
exit(EXIT_FAILURE);
}
// Multicast Address এবং Port সেট করা
memset(&multicast_addr, 0, sizeof(multicast_addr));
multicast_addr.sin_family = AF_INET;
multicast_addr.sin_addr.s_addr = inet_addr(GROUP);
multicast_addr.sin_port = htons(PORT);
// Multicast মেসেজ পাঠানো
if (sendto(sockfd, message, sizeof(message), 0, (struct sockaddr*)&multicast_addr, sizeof(multicast_addr)) < 0) {
perror("Sendto failed");
close(sockfd);
exit(EXIT_FAILURE);
}
printf("Multicast message sent!\n");
close(sockfd);
return 0;
}
IP_MULTICAST_TTL
সেট করে TTL মান 5
নির্ধারণ করা হয়েছে।Broadcast হলো এমন একটি প্রক্রিয়া, যেখানে একটি ডেটা প্যাকেট নেটওয়ার্কে সকল ডিভাইসে পাঠানো হয়। এটি সাধারণত UDP প্রোটোকল ব্যবহার করে, এবং একই নেটওয়ার্কে থাকা সব ডিভাইসকে (subnet) একই সাথে ডেটা পাঠায়। Broadcast সাধারণত ডিসকভারি প্রোটোকল বা নেটওয়ার্কের ডিভাইসগুলোকে মেসেজ পাঠাতে ব্যবহৃত হয়।
SO_BROADCAST
:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/socket.h>
#define PORT 12345
#define BROADCAST_IP "255.255.255.255" // Broadcast Address
int main() {
int sockfd;
struct sockaddr_in broadcast_addr;
char message[] = "Hello Broadcast!";
int opt = 1;
// UDP Socket তৈরি করা
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// SO_BROADCAST অপশন সেট করা
if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &opt, sizeof(opt)) < 0) {
perror("Setting SO_BROADCAST failed");
close(sockfd);
exit(EXIT_FAILURE);
}
// Broadcast Address এবং Port সেট করা
memset(&broadcast_addr, 0, sizeof(broadcast_addr));
broadcast_addr.sin_family = AF_INET;
broadcast_addr.sin_addr.s_addr = inet_addr(BROADCAST_IP);
broadcast_addr.sin_port = htons(PORT);
// Broadcast মেসেজ পাঠানো
if (sendto(sockfd, message, sizeof(message), 0, (struct sockaddr*)&broadcast_addr, sizeof(broadcast_addr)) < 0) {
perror("Sendto failed");
close(sockfd);
exit(EXIT_FAILURE);
}
printf("Broadcast message sent!\n");
close(sockfd);
return 0;
}
255.255.255.255
ব্যবহার করে সমস্ত ডিভাইসে মেসেজ পাঠায়। SO_BROADCAST
অপশন সক্রিয় করে এটি সম্ভব করা হয়েছে।বৈশিষ্ট্য | Multicast | Broadcast |
---|---|---|
ডেটা ট্রান্সমিশন পদ্ধতি | নির্দিষ্ট Multicast Group-এ ডেটা পাঠানো হয় | একই নেটওয়ার্কে থাকা সব ডিভাইসে ডেটা পাঠানো হয় |
ব্যবহার | লাইভ স্ট্রিমিং, রিয়েল-টাইম ডেটা শেয়ারিং | নেটওয়ার্ক ডিসকভারি, আলার্ম সিস্টেম |
কনফিগারেশন | Multicast Address ব্যবহার করে | Broadcast Address (255.255.255.255) |
প্রোটোকল | UDP (সাধারণত) | UDP (সাধারণত) |
common.read_more